#ifndef __BLDC_change_
#define __BLDC_change_
#include "hal_uart.h"
#include "HAL_device.h" // Device header
#include "hal_gpio.h"
//#include "Whole_Motor_Structure.h"
#include "hal_rcc.h"
#include "Whole_Motor_Parameters.h"
//#include "Sin_table.h"
#include <stdio.h>
#include "motor_status.h"

void BLDC_Init(void);
void BLDC_motor_modulation_value_set(uint32_t modulation);
void motor_status_set(char u_status, char v_status, char w_status);
void BLDC_motor_set_target(char target);
void BLDC_motor_set_max_current(int max_current);
void BLDC_start_motor(void);
void BLDC_status_change(void);
void BLDC_change_mode_compare(void);
void motor_status_change_auto(void);
void motor_status_change_check_and_set(void);
void adc_flag_set_and_check_status(void);
void speed_flag_set_and_check_status(void);
void speed_control_watching(void);
void set_speed(uint32_t speed_in);
uint32_t get_speed_setted(void);
uint32_t get_speed_now(void);

void set_u_max_value(u32 value);
void set_v_max_value(u32 value);
void set_w_max_value(u32 value);
void set_u_min_value(u32 value);
void set_v_min_value(u32 value);
void set_w_min_value(u32 value);
void clear_max_flag(void);
void clear_min_flag(void);

void motor_reserving_jugement(void);
void check_bemf_u_zero_rise_cross(uint32_t check_value);
void check_bemf_u_zero_down_cross(uint32_t check_value);
void check_bemf_v_zero_rise_cross(uint32_t check_value);
void check_bemf_v_zero_down_cross(uint32_t check_value);
void check_bemf_w_zero_rise_cross(uint32_t check_value);
void check_bemf_w_zero_down_cross(uint32_t check_value);
void check_bemf_u_zero_check_reset(void);
void check_bemf_v_zero_check_reset(void);
void check_bemf_w_zero_check_reset(void);

#endif
